#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/types.h>

sem_t mu ;

void* task(void *p)
{
	sem_wait(&mu);
	int fd = open("a.txt",O_RDWR | O_APPEND);
	if(fd == -1)
		perror("open") , exit(-1);
	int i = *(int *)p;
	char buf[100] = {};
	sprintf(buf , "thread %d\n" , i);
	usleep(100);
	printf("%s\n",buf);
	write(fd , buf , sizeof(buf));
	close(fd);
	sem_post(&mu);
}

int main()
{
	sem_init(&mu ,0 ,10);
	int i;
	for(i = 0 ; i < 20 ; ++i)
	{
		pthread_t id ;
		pthread_create(&id , 0 , task , (void *)&i);
	}
//	for(i = 0 ; i < 20 ; ++i)
//	{
//		pthread_join(id[i] , 0);		
//	}
	while(1);		
	sem_destroy(&mu);
		
	return 0;
}
